멀티턴 대화
Anthropic API와 Claude를 사용할 때 반드시 이해해야 할 핵심 개념이 있습니다: Claude는 대화 기록을 전혀 저장하지 않습니다 . 매 요청은 이전 대화에 대한 기억 없이 완전히 독립적으로 처리됩니다.
즉, Claude가 이전 메시지의 맥락을 기억하는 멀티턴 대화를 원한다면 대화 상태를 직접 관리해야 합니다.
상태 없는 대화의 문제점
예를 들어 Claude에게 "양자 컴퓨팅이란 무엇인가요?"라고 물어서 좋은 답변을 받았다고 가정해봅시다. 그런 다음 "다른 문장을 하나 더 써주세요"라고 후속 질문을 하면, Claude는 무엇을 가리키는지 전혀 알지 못합니다. 양자 컴퓨팅에 대한 논의를 기억하지 못하므로 완전히 무작위한 주제로 문장을 작성할 것입니다.
멀티턴 대화의 작동 방식
대화 맥락을 유지하려면 두 가지를 해야 합니다:
- 코드에서 모든 메시지 목록을 수동으로 관리하기
- 매 요청마다 전체 메시지 기록 전송하기
실제로 작동하는 흐름은 다음과 같습니다:
- 초기 사용자 메시지를 Claude에게 전송하기
- Claude의 응답을 받아 어시스턴트 메시지로 메시지 목록에 추가하기
- 후속 질문을 또 다른 사용자 메시지로 추가하기
- 전체 대화 기록을 Claude에게 전송하기
헬퍼 함수 만들기
대화 관리를 더 쉽게 하기 위해 세 가지 헬퍼 함수를 만들 수 있습니다:
def add_user_message(messages, text):
user_message = {"role": "user", "content": text}
messages.append(user_message)
def add_assistant_message(messages, text):
assistant_message = {"role": "assistant", "content": text}
messages.append(assistant_message)
def chat(messages):
message = client.messages.create(
model=model,
max_tokens=1000,
messages=messages,
)
return message.content[0].text
모두 합치기
이 함수들을 사용해 대화를 유지하는 방법은 다음과 같습니다:
# Start with an empty message list
messages = []
# Add the initial user question
add_user_message(messages, "Define quantum computing in one sentence")
# Get Claude's response
answer = chat(messages)
# Add Claude's response to the conversation history
add_assistant_message(messages, answer)
# Add a follow-up question
add_user_message(messages, "Write another sentence")
# Get the follow-up response with full context
final_answer = chat(messages)
이제 Claude는 "다른 문장을 하나 더 써주세요"가 양자 컴퓨팅 정의를 확장하는 것임을 이해할 것입니다. 완전한 대화 맥락을 제공했기 때문입니다.
이 헬퍼 함수들은 Claude와 작업하는 내내 유용하게 쓰일 것이며, 여러 번의 교환을 통해 의미 있는 대화를 유지할 수 있는 애플리케이션을 훨씬 쉽게 구축할 수 있게 해줍니다.
